ATOM Documentation

← Back to App

Workflow Builder User Guide

**Last Updated:** 2026-03-28

**Version:** 1.0.0

Table of Contents

  1. Getting Started
  2. Using Templates
  3. Working with Nodes
  4. Connecting Nodes
  5. Configuring Workflows
  6. Variables and Inputs
  7. Testing and Execution
  8. Saving and Sharing
  9. Tips and Best Practices
  10. Troubleshooting

---

Getting Started

Accessing the Visual Workflow Builder

The Visual Workflow Builder is accessible from the Automations section of your ATUM SaaS dashboard.

**Navigation:**

  1. Log in to your ATUM SaaS account
  2. Navigate to **Automations** in the left sidebar
  3. Click **Workflow Builder** to launch the visual editor

**Prerequisites:**

  • Active ATUM SaaS account (Free, Solo, Team, or Enterprise tier)
  • Appropriate plan permissions (see Plan Limits)
  • Integrations connected (for integration workflows)

Interface Overview

The Workflow Builder consists of three main areas:

**1. Canvas (Center)**

  • Visual workspace for building workflows
  • Drag-and-drop node placement
  • Visual connection lines between nodes
  • Pan and zoom controls

**2. Sidebar (Left)**

  • Template browser
  • Node palette (triggers, actions, integrations, entities, agents)
  • Workflow settings
  • Variable substitution panel

**3. Toolbar (Top)**

  • Execute workflow button
  • Save workflow button
  • Save as template button
  • Undo/redo buttons
  • Clear canvas button
  • Help button

Quick Start: Create Your First Workflow

Let's create a simple workflow that sends a Slack message when a new lead is created.

**Step 1: Choose a Template**

  1. Click **Templates** in the sidebar
  2. Browse available templates or start from scratch
  3. For this example, click **Start Blank Workflow**

**Step 2: Add a Trigger Node**

  1. Click **Triggers** in the sidebar
  2. Drag **Webhook Trigger** to the canvas
  3. Configure the webhook URL (auto-generated)

**Step 3: Add an Integration Node**

  1. Click **Integrations** in the sidebar
  2. Select **Slack**
  3. Drag **Send Message** to the canvas
  4. Connect the trigger to the Slack node

**Step 4: Configure the Slack Message**

  1. Click the Slack node to select it
  2. In the configuration panel, enter:
  • Channel: #sales
  • Message: New lead created: ${input.name}
  1. Click **Save**

**Step 5: Test Your Workflow**

  1. Click **Test Workflow** in the toolbar
  2. Enter test input: {"name": "John Doe"}
  3. Click **Run Test**
  4. Check your Slack channel for the message

**Step 6: Save Your Workflow**

  1. Click **Save Workflow** in the toolbar
  2. Enter a name: "Lead Notification Workflow"
  3. Click **Save**

Congratulations! You've created your first workflow.

---

Using Templates

The Template Gallery provides pre-built workflows for common use cases.

**Access:**

  1. Click **Templates** in the sidebar
  2. Browse by category:
  • **Integration**: Connect two or more services
  • **Automation**: Automate repetitive tasks
  • **Approval**: Multi-step approval workflows

**Template Categories:**

CategoryDescriptionExamples
**Integration**Connect different servicesSalesforce to Slack, Zoom to Notion
**Automation**Automate tasksEmail follow-ups, data sync
**Approval**Multi-step approvalsBudget approval, document review

Filtering by Category

**Quick Filter Tabs:**

  • **All**: Show all templates
  • **Integration**: Integration workflows only
  • **Automation**: Automation workflows only
  • **Approval**: Approval workflows only

**How to Filter:**

  1. Click the desired category tab
  2. Templates update instantly

Previewing Templates

Before loading a template, you can preview its structure.

**Preview Features:**

  • Template name and description
  • Number of steps
  • Complexity level (beginner, intermediate, advanced, expert)
  • Required integrations
  • Step overview

**How to Preview:**

  1. Hover over a template card
  2. Click **Preview** button
  3. Review template details
  4. Click **Load Template** to use it

Loading Template into Canvas

**Steps:**

  1. Browse templates in the sidebar
  2. Click on a template card
  3. Review template in preview panel
  4. Click **Load Template**
  5. Template appears on canvas with all nodes and connections

**What Happens:**

  • Template steps are converted to visual nodes
  • Nodes are automatically positioned (tree layout)
  • Connections are created between nodes
  • Template inputs are extracted
  • Variable references are identified

Customizing Loaded Templates

Once loaded, you can customize the template:

**Customization Options:**

  1. **Add Nodes**: Drag additional nodes from the sidebar
  2. **Remove Nodes**: Select a node and press Delete/Backspace
  3. **Reconfigure Nodes**: Click a node to edit its configuration
  4. **Change Connections**: Drag connection lines to different nodes
  5. **Modify Variables**: Update variable references in the Variable Panel

**Example: Customize a Template**

  1. Load "Salesforce to Slack Sync" template
  2. Add a filter node to only sync qualified leads
  3. Change the Slack channel from #sales to #leads
  4. Add an email notification step
  5. Save as a new template

---

Working with Nodes

Adding Nodes to Canvas

**Methods:**

**1. Drag and Drop (Recommended)**

  • Click a node type in the sidebar
  • Drag it onto the canvas
  • Release to place the node

**2. Click to Add**

  • Click a node type in the sidebar
  • Node appears in the center of the canvas
  • Drag to reposition

**3. Keyboard Shortcuts**

  • Press T for trigger node
  • Press A for action node
  • Press I for integration node
  • Press E for entity node
  • Press G for agent node

Integration Nodes

Integration nodes connect to 39+ external services like Slack, Salesforce, Gmail, etc.

**Available Integrations:**

**Communication:**

  • Slack: Send messages, create channels
  • Gmail: Send emails, label messages
  • Microsoft Teams: Send messages, create channels

**CRM:**

  • Salesforce: Create leads, query contacts
  • HubSpot: Create contacts, update deals
  • Pipedrive: Create deals, update activities

**Project Management:**

  • Asana: Create tasks, update projects
  • Notion: Create pages, update databases
  • Trello: Create cards, update lists

**Productivity:**

  • Zoom: Create meetings, list recordings
  • Google Calendar: Create events, list calendars
  • Dropbox: Upload files, create folders

**And 30+ more integrations!**

**Configuring Integration Nodes:**

**Step 1: Select Integration**

  1. Click **Integrations** in the sidebar
  2. Browse or search for your integration
  3. Check connection status (green = connected, red = not connected)

**Step 2: Choose Operation**

  1. After selecting an integration, view available operations
  2. Click an operation to add it to the canvas
  3. Examples:
  • Slack: Send Message, Create Channel
  • Salesforce: Create Lead, Query Contacts
  • Gmail: Send Email, List Messages

**Step 3: Configure Parameters**

  1. Click the integration node on the canvas
  2. Fill in required parameters:
  • **Static values**: Enter fixed values (e.g., channel name)
  • **Variable references**: Use ${input.field} or ${step_N.field} for dynamic values
  1. Click **Save**

**Example: Send Slack Message**

Integration: Slack
Operation: Send Message
Parameters:
  - channel: ${input.slack_channel}  (variable)
  - message: New lead: ${input.lead_name}  (variable)

**Connection Status:**

  • **Green Badge**: Integration is connected and ready to use
  • **Red Badge**: Integration needs OAuth connection
  • **Click to Connect**: Opens OAuth flow in popup window

Entity Nodes

Entity nodes perform CRUD operations on your custom entity types (Leads, Tasks, Deals, etc.).

**Available Entity Types:**

  • Leads: Potential customers
  • Tasks: Action items
  • Deals: Sales opportunities
  • Custom entities: Any entity type you've created

**Entity Operations:**

OperationDescriptionMaturity Required
**Create**Create a new entityIntern+
**Read**Read an existing entityStudent+
**Update**Update an existing entitySupervised+
**Delete**Delete an entityAutonomous
**Query**List entities with filtersStudent+

**Configuring Entity Nodes:**

**Step 1: Select Entity Type**

  1. Click **Entities** in the sidebar
  2. Choose an entity type (e.g., Lead)
  3. View entity schema (fields and types)

**Step 2: Choose Operation**

  1. Select an operation (Create, Read, Update, Delete, Query)
  2. Check maturity level requirement
  3. Click to add to canvas

**Step 3: Configure Parameters**

  1. Click the entity node on the canvas
  2. Fill in entity data:
  • **Create**: Provide all required fields
  • **Read**: Provide entity ID
  • **Update**: Provide entity ID and fields to update
  • **Delete**: Provide entity ID
  • **Query**: Provide filter criteria
  1. Click **Save**

**Example: Create Lead**

Entity Type: Lead
Operation: Create
Parameters:
  - first_name: ${input.first_name}
  - last_name: ${input.last_name}
  - email: ${input.email}
  - status: "new"
  - source: "webform"

**Maturity Color Coding:**

  • **Gray**: Student (read-only)
  • **Blue**: Intern (create with approval)
  • **Yellow**: Supervised (create/update with monitoring)
  • **Green**: Autonomous (full CRUD)

Agent Nodes

Agent nodes execute AI agents with specific tasks and prompts.

**Agent Maturity Levels:**

LevelCapabilitiesRestrictions
**Student**Read-only, search, browseCannot take actions
**Intern**Propose actions, create draftsApproval required for actions
**Supervised**Execute most actionsLive monitoring required
**Autonomous**Full access, can supervise othersNo restrictions

**Configuring Agent Nodes:**

**Step 1: Select Agent**

  1. Click **Agents** in the sidebar
  2. Browse your agents
  3. View agent maturity level and capabilities
  4. Click to add to canvas

**Step 2: Configure Task**

  1. Click the agent node on the canvas
  2. Enter a task prompt:
  • Be specific about what you want the agent to do
  • Include context from previous steps using variables
  • Specify output format if needed
  1. Click **Save**

**Example: Analyze Lead**

Agent: Sales Assistant
Maturity: Intern
Task Prompt: |
  Analyze this lead and determine if they qualify for follow-up.
  Lead data: ${step_create_lead.output}
  Consider:
  - Company size
  - Industry
  - Job title
  - Location
  Return: score (0-100) and reasoning

**Governance Display:**

  • Student: "Read-only access - no actions allowed"
  • Intern: "Approval required for actions"
  • Supervised: "Live monitoring enabled"
  • Autonomous: "Full access - can supervise other agents"

Trigger Nodes

Trigger nodes define how workflows are initiated.

**Trigger Types:**

**1. Webhook Trigger**

  • HTTP endpoint that starts workflow
  • Receives JSON payload
  • Useful for external systems

**Configuration:**

  • Webhook URL (auto-generated)
  • Input schema (define expected JSON structure)
  • Authentication (optional API key)

**Example:**

Trigger Type: Webhook
URL: https://atomagentos.com/api/webhooks/wh-abc123
Input Schema:
  {
    "type": "object",
    "properties": {
      "email": {"type": "string"},
      "name": {"type": "string"},
      "company": {"type": "string"}
    }
  }

**2. Schedule Trigger**

  • Cron-based scheduling
  • Recurring execution
  • Useful for batch jobs

**Configuration:**

  • Cron expression (e.g., 0 9 * * 1 for every Monday at 9am)
  • Timezone
  • Input parameters (static values)

**Example:**

Trigger Type: Schedule
Cron: 0 9 * * 1  (Every Monday at 9am)
Timezone: America/New_York
Input: {}

**3. Manual Trigger**

  • Start workflow manually
  • No automatic triggering
  • Useful for testing and one-off tasks

**Configuration:**

  • Input schema (define required inputs)

Control Flow Nodes

Control flow nodes manage workflow logic and branching.

**Condition Node**

  • Branch workflow based on conditions
  • Support true/false paths
  • Variable substitution in conditions

**Example:**

Condition: ${step_1.score} > 80
True Path: Create qualified lead
False Path: Create unqualified lead

**Loop Node**

  • Iterate over arrays
  • Process items in batch
  • Continue until condition met

**Example:**

Loop Over: ${step_query_leads.results}
Max Iterations: 100
Condition: item.status == "new"

---

Connecting Nodes

Creating Connections Between Nodes

Connections define the order in which workflow steps execute.

**Methods:**

**1. Drag from Output Port**

  1. Hover over a node to reveal connection points
  2. Click and drag from the right-side output port
  3. Drag to another node's input port (left side)
  4. Release to create connection

**2. Auto-Connect**

  • When you add a node near an existing node
  • Connection is created automatically
  • Drag to reposition if needed

**3. Connection Panel**

  1. Select a node
  2. In the configuration panel, click **Add Dependency**
  3. Select the node to depend on
  4. Connection is created

Setting Up Conditional Paths

Use condition nodes to create branching workflows.

**Example: Lead Qualification Workflow**

Webhook Trigger
  ↓
Condition: Is lead qualified? (${step_1.score} > 80)
  ↓                    ↓
True (Qualified)    False (Not Qualified)
  ↓                    ↓
Create Task          Send Email
  ↓                    ↓
Notify Sales         Archive Lead

**Setting Up:**

  1. Add a Condition node after the assessment step
  2. Configure the condition: ${step_assess.score} > 80
  3. Add nodes for true path (e.g., Create Task)
  4. Add nodes for false path (e.g., Send Email)
  5. Connect nodes to appropriate condition outputs

**Branching Best Practices:**

  • Always handle both true and false paths
  • Use clear condition names
  • Label branches with descriptive text
  • Test each branch independently

Branching Workflows

Create complex workflows with multiple branches and merges.

**Example: Multi-Channel Notification**

New Lead Created
  ↓
Check Preferred Channel
  ↓         ↓         ↓
Email     Slack     SMS
  ↓         ↓         ↓
  ←─────────┴─────────→
         ↓
    Log Notification

**Branching Patterns:**

**1. Parallel Execution**

  • Multiple branches execute simultaneously
  • All branches complete before next step
  • Useful for multi-channel notifications

**2. Exclusive Split**

  • Only one branch executes based on condition
  • Other branches are skipped
  • Useful for if/else logic

**3. Merge**

  • Multiple branches converge to single node
  • Waits for all branches to complete
  • Useful for aggregating results

---

Configuring Workflows

Node Configuration Panel

When you select a node on the canvas, the configuration panel appears on the right side.

**Panel Sections:**

**1. Node Info**

  • Node name (editable)
  • Node type badge
  • Node description

**2. Parameters**

  • Required parameters (marked with *)
  • Optional parameters
  • Parameter types (string, number, boolean, etc.)
  • Help text for each parameter

**3. Variable Substitution**

  • Available variables list
  • Variable preview
  • Insert variable button

**4. Advanced Settings**

  • Error handling (continue, stop, retry)
  • Timeout settings
  • Retry policy
  • Logging level

Setting Parameters

**Parameter Types:**

**1. Text Input**

  • For short text values
  • Example: Channel name, email subject
  • Supports variable substitution

**2. Text Area**

  • For long text values
  • Example: Email body, message content
  • Supports variable substitution and multi-line

**3. Number Input**

  • For numeric values
  • Example: Timeout, retry count
  • Min/max validation

**4. Select Dropdown**

  • Choose from predefined options
  • Example: Priority, status
  • Single or multi-select

**5. Boolean Toggle**

  • Yes/no or on/off values
  • Example: Enable notifications, strict mode

**6. JSON Editor**

  • For complex data structures
  • Example: Filter criteria, API payloads
  • Syntax highlighting and validation

**Example: Configure Slack Message**

Parameter: channel
Type: Text Input
Value: ${input.slack_channel}

Parameter: message
Type: Text Area
Value: |
  New lead received!
  Name: ${input.name}
  Email: ${input.email}
  Company: ${input.company}

Parameter: username
Type: Text Input
Value: ATUM Bot

Parameter: icon_emoji
Type: Select Dropdown
Value: :robot_face:

Using Variables

Variables enable dynamic workflow behavior.

**Variable Types:**

**1. Input Variables**

  • Reference template input values
  • Format: ${input.field_name}
  • Evaluated at workflow start

**Example:**

Message: Hello ${input.name}, welcome to ATUM!

**2. Step Output Variables**

  • Reference outputs from previous steps
  • Format: ${step_N.field_name} (N = step index)
  • Format: ${step_step_id.field_name} (step_id = step identifier)
  • Evaluated during workflow execution

**Example:**

Message: Lead created with ID: ${step_create_lead.lead_id}

**3. Nested Variables**

  • Reference nested fields in objects
  • Use dot notation: ${step_1.data.field.nested_field}
  • Supports array indexing: ${step_1.items[0].name}

**Example:**

Email: ${step_query_leads.results[0].email}

Variable Reference Syntax

**Basic Syntax:**

${source.field_path}

**Sources:**

  • input: Template input values
  • step_N: Step output by index (0-based)
  • step_step_id: Step output by step ID

**Field Paths:**

  • Use dot notation for nested fields
  • Use bracket notation for array indices
  • Support special characters with quotes

**Examples:**

${input.name}
${step_1.output.lead_id}
${step_create_lead.email}
${step_1.results[0].status}
${step_1.data['field-with-dash']}

**Validation:**

  • Variables are validated when you save the workflow
  • Invalid variables show error messages
  • Variable sources must exist
  • Field paths must be accessible

---

Variables and Inputs

Understanding ${input.field} Variables

Input variables allow workflows to accept external data.

**Use Cases:**

  • Webhook payloads
  • User-provided parameters
  • Scheduled job parameters
  • Test data

**Defining Input Variables:**

**1. In Workflow Settings**

  1. Click **Settings** in the toolbar
  2. Go to **Inputs** tab
  3. Click **Add Input**
  4. Configure input:
  • Name: lead_name
  • Label: Lead Name
  • Type: text
  • Required: Yes
  • Default Value: John Doe
  • Help Text: Enter the lead's full name
  1. Click **Save**

**2. In Template**

When creating a template, define inputs in the template schema:

{
  "inputs": [
    {
      "name": "lead_name",
      "label": "Lead Name",
      "type": "string",
      "required": true,
      "default_value": "John Doe",
      "help_text": "Enter the lead's full name",
      "validation_rules": {
        "min_length": 2,
        "max_length": 100
      }
    }
  ]
}

**Using Input Variables:**

Message: New lead: ${input.lead_name}

Using ${step_N.field} References

Step references pass data between workflow steps.

**Step Indexing:**

  • Steps are indexed starting from 0
  • Index is based on execution order, not canvas position
  • Use step ID for more readable references

**Example Workflow:**

Step 0: Webhook Trigger
Step 1: Create Salesforce Lead
Step 2: Send Slack Message

**Referencing Step 1 Output from Step 2:**

Message: Lead created with ID: ${step_1.lead_id}

**Using Step IDs (Recommended):**

Message: Lead created with ID: ${step_create_lead.lead_id}

**Output Schema:**

Each step outputs specific fields. Check the step documentation for available fields.

**Example: Create Lead Output:**

{
  "lead_id": "001xx000003DGb2A",
  "success": true,
  "errors": []
}

**Referencing Output Fields:**

Lead ID: ${step_create_lead.lead_id}
Success: ${step_create_lead.success}

Variable Substitution Panel

The Variable Substitution Panel shows all variables in your workflow and allows you to provide input values.

**Access:**

  1. Click **Variables** in the sidebar
  2. Panel shows:
  • Template inputs
  • Step output variables
  • Variable values
  • Variable sources

**Features:**

**1. Variable Extraction**

  • Automatically extracts variables from workflow
  • Shows variable sources (input vs. step)
  • Groups variables by source

**2. Variable Validation**

  • Validates variable syntax
  • Checks variable sources exist
  • Shows errors for invalid variables

**3. Input Value Entry**

  • Provide values for input variables
  • Preview resolved values
  • Test variable substitution

**4. Variable Preview**

  • Shows how variables will be resolved
  • Displays final values after substitution
  • Updates in real-time

**Example: Variable Panel**

Input Variables:
  lead_name (required)
    Value: John Doe
    Type: text

  slack_channel (required)
    Value: #sales
    Type: text

Step Output Variables:
  step_create_lead.lead_id
    Source: Create Salesforce Lead
    Type: string
    Value: (will be set during execution)

  step_create_lead.success
    Source: Create Salesforce Lead
    Type: boolean
    Value: (will be set during execution)

Providing Input Values

**When Testing:**

  1. Click **Test Workflow** in the toolbar
  2. Variable Panel appears with input fields
  3. Enter values for required inputs
  4. Optional: Enter values for optional inputs
  5. Click **Run Test**

**When Executing:**

  1. Click **Execute Workflow** in the toolbar
  2. Variable Panel appears
  3. Enter input values
  4. Click **Execute**

**When Triggering via Webhook:**

  • Input values come from webhook payload
  • No manual input required
  • Payload must match input schema

**Input Value Types:**

  • **Text**: Plain text string
  • **Number**: Integer or decimal
  • **Boolean**: true or false
  • **JSON**: Complex data structure
  • **Array**: List of values
  • **File**: File upload (for attachments)

Previewing Resolved Values

The Variable Panel shows how variables will be resolved during execution.

**Preview Features:**

  • Shows final values after substitution
  • Highlights variable references
  • Updates in real-time as you type
  • Validates variable syntax

**Example Preview:**

Original: New lead: ${input.lead_name}
Resolved: New lead: John Doe

Original: Lead ID: ${step_create_lead.lead_id}
Resolved: Lead ID: (pending execution)

**Color Coding:**

  • **Blue**: Variable reference
  • **Black**: Static text
  • **Gray**: Pending execution
  • **Red**: Error (invalid variable)

---

Testing and Execution

Testing Individual Nodes

Test nodes individually before running the full workflow.

**How to Test a Node:**

  1. Select the node on the canvas
  2. Click **Test Node** in the configuration panel
  3. Provide test input values
  4. Click **Run Test**
  5. View test results

**Test Results Show:**

  • Success/failure status
  • Output data
  • Execution time
  • Error messages (if any)

**Example: Test Slack Node**

Input:
  channel: #test
  message: Test message from ATUM

Output:
  success: true
  message_ts: "123456.789"
  channel: "#test"

Execution Time: 245ms

**Use Cases:**

  • Verify integration credentials
  • Test API calls
  • Validate variable substitution
  • Debug node configuration

Executing Workflows

Execute the entire workflow from the toolbar.

**Steps:**

  1. Click **Execute Workflow** in the toolbar
  2. Variable Panel appears
  3. Enter input values
  4. Click **Execute**
  5. Monitor execution progress

**Execution Modes:**

**1. Test Mode**

  • Executes workflow with test data
  • No side effects (integrations not called)
  • Fast execution
  • Useful for development

**2. Live Mode**

  • Executes workflow with real data
  • Integrations are called
  • Side effects occur
  • Useful for production

**Select Mode:**

  • Toggle between Test/Live in the toolbar
  • Test mode is default
  • Live mode shows warning

Viewing Execution Results

After execution, view detailed results.

**Results Panel:**

Execution ID: exec-456
Status: Completed
Started: 2026-03-28 15:30:00
Completed: 2026-03-28 15:30:05
Duration: 5.2s

Step Results:
  ✓ Step 0: Webhook Trigger (50ms)
  ✓ Step 1: Create Salesforce Lead (1.2s)
  ✓ Step 2: Send Slack Message (3.9s)

Output:
  lead_id: "001xx000003DGb2A"
  success: true
  message_ts: "123456.789"

**Step Details:**

  • Click a step to view details
  • See input parameters
  • See output data
  • View error messages (if any)

**Export Results:**

  • Click **Export Results** in the toolbar
  • Download as JSON
  • Download as CSV
  • Copy to clipboard

Debugging Failed Executions

When a workflow fails, debug the issue.

**Failure Types:**

**1. Integration Not Connected**

  • Error: "Slack integration not connected"
  • Solution: Click integration to connect OAuth
  • Retry: After connecting, re-execute workflow

**2. Missing Input Values**

  • Error: "Required input 'lead_name' not provided"
  • Solution: Provide value in Variable Panel
  • Retry: Re-execute with correct values

**3. Variable Reference Error**

  • Error: "Variable 'step_1.lead_id' not found"
  • Solution: Check step ID or index
  • Retry: Fix variable reference and re-execute

**4. Governance Block**

  • Error: "Agent maturity level insufficient for this action"
  • Solution: Upgrade agent maturity or change operation
  • Retry: Re-execute with appropriate permissions

**5. Quota Exceeded**

  • Error: "Daily workflow execution quota exceeded"
  • Solution: Upgrade plan or wait for quota reset
  • Retry: Execute after quota reset

**Debugging Tips:**

  1. **Check Logs**: View detailed logs for each step
  2. **Test Individually**: Test failing node in isolation
  3. **Verify Inputs**: Ensure input values are correct
  4. **Check Connections**: Verify integrations are connected
  5. **Review Governance**: Check agent maturity levels
  6. **Monitor Quota**: Check plan limits

---

Saving and Sharing

Saving Workflows

Save your workflow to continue editing later.

**Steps:**

  1. Click **Save Workflow** in the toolbar
  2. Enter workflow name
  3. Enter description (optional)
  4. Click **Save**

**Saved Workflows:**

  • Appear in **My Workflows** section
  • Can be loaded into canvas
  • Can be edited
  • Can be executed

**Auto-Save:**

  • Workflows auto-save every 30 seconds
  • Last saved time shown in toolbar
  • Manual save overrides auto-save

Saving as Template

Save your workflow as a template for reuse or sharing.

**Steps:**

  1. Click **Save as Template** in the toolbar
  2. Enter template metadata:
  • Name: "Salesforce to Slack Lead Sync"
  • Description: "Sync new Salesforce leads to Slack channel"
  • Category: Integration
  • Complexity: Beginner
  • Tags: salesforce, slack, sync, leads
  1. Choose visibility:
  • **Private**: Only you can see and use
  • **Public**: Anyone can see and use (requires approval)
  1. Click **Save Template**

**Template Metadata:**

**Name:**

  • Short, descriptive title
  • Example: "Salesforce to Slack Lead Sync"

**Description:**

  • What the workflow does
  • When to use it
  • Required integrations
  • Example: "Syncs new Salesforce leads to a Slack channel for instant sales team notification."

**Category:**

  • Integration: Connect services
  • Automation: Automate tasks
  • Approval: Multi-step approvals

**Complexity:**

  • Beginner: Simple workflows (1-3 steps)
  • Intermediate: Moderate complexity (4-6 steps)
  • Advanced: Complex workflows (7-10 steps)
  • Expert: Highly complex (10+ steps)

**Tags:**

  • Comma-separated keywords
  • Helps with searchability
  • Example: salesforce, slack, sync, leads, crm

Template Metadata

When saving as a template, provide metadata for discoverability.

**Required Fields:**

  • Name
  • Description
  • Category
  • Complexity

**Optional Fields:**

  • Tags
  • Estimated duration
  • Required integrations
  • Example inputs

**Best Practices:**

  • Use descriptive names
  • Write clear descriptions
  • Choose appropriate category
  • Set accurate complexity
  • Add relevant tags
  • Provide example inputs

**Example:**

Name: Salesforce to Slack Lead Sync
Description: |
  Sync new Salesforce leads to a Slack channel for instant sales team notification.
  Perfect for sales teams who want real-time lead alerts in Slack.
Category: Integration
Complexity: Beginner
Tags: salesforce, slack, sync, leads, crm, notification
Estimated Duration: 5 seconds
Required Integrations:
  - Salesforce (query leads)
  - Slack (send message)
Example Inputs:
  slack_channel: "#sales"
  lead_limit: 10

Making Templates Public

Share your templates with the ATUM community.

**Visibility Options:**

**Private (Default)**

  • Only you can see and use
  • Appears in **My Templates**
  • No approval required

**Public**

  • Anyone can see and use
  • Appears in **Public Templates**
  • Requires approval
  • Can be featured

**How to Make Public:**

  1. Save as template
  2. Set visibility to **Public**
  3. Submit for approval
  4. Wait for review (usually 24-48 hours)
  5. Template appears in public gallery

**Approval Criteria:**

  • Workflow must execute successfully
  • Documentation must be clear
  • Template must be useful
  • No security vulnerabilities
  • Follows best practices

**Benefits of Public Templates:**

  • Community recognition
  • Help other users
  • Showcase your expertise
  • Potential featured placement

---

Tips and Best Practices

Workflow Design Patterns

**1. Sequential Pattern**

Execute steps one after another.

Step 1 → Step 2 → Step 3

**Use Cases:**

  • Data pipelines
  • Multi-stage transformations
  • Sequential approvals

**2. Parallel Pattern**

Execute multiple steps simultaneously.

Step 1 → Step 2 → Step 3
        ↓
      Step 4 → Step 5

**Use Cases:**

  • Multi-channel notifications
  • Batch processing
  • Redundant operations

**3. Branching Pattern**

Execute different paths based on conditions.

Step 1 → Condition → True Path
                → False Path

**Use Cases:**

  • Lead qualification
  • Error handling
  • A/B testing

**4. Loop Pattern**

Iterate over items and process each.

Step 1 (list items) → Loop → Process Item → Continue
                            ↑__________________↓

**Use Cases:**

  • Batch processing
  • Bulk operations
  • Iterative transformations

**5. Error Handling Pattern**

Handle errors gracefully and continue.

Step 1 → Try Operation → Success → Continue
                    → Error → Log Error → Continue

**Use Cases:**

  • Resilient workflows
  • Partial success handling
  • Error recovery

Common Pitfalls

**1. Circular Dependencies**

  • **Problem**: Node A depends on Node B, Node B depends on Node A
  • **Solution**: Redesign workflow to eliminate circular dependencies
  • **Detection**: Workflow builder shows warning

**2. Missing Variable References**

  • **Problem**: Referencing non-existent variables
  • **Solution**: Check variable names and step IDs
  • **Detection**: Variable panel shows errors

**3. Unconnected Nodes**

  • **Problem**: Nodes not connected to the main flow
  • **Solution**: Connect all nodes or remove unused nodes
  • **Detection**: Visual indicator on canvas

**4. Hard-coded Values**

  • **Problem**: Using hard-coded values instead of variables
  • **Solution**: Use variables for dynamic data
  • **Best Practice**: ${input.field} instead of "value"

**5. No Error Handling**

  • **Problem**: Workflow fails on first error
  • **Solution**: Add error handling nodes
  • **Best Practice**: Use try/catch patterns

**6. Complex Workflows**

  • **Problem**: Too many nodes in one workflow
  • **Solution**: Split into smaller workflows
  • **Best Practice**: Keep workflows under 20 nodes

**7. Missing Integration Connections**

  • **Problem**: Integration nodes without OAuth
  • **Solution**: Connect integrations before execution
  • **Detection**: Red badge on integration nodes

Performance Optimization

**1. Minimize Node Count**

  • Fewer nodes = faster execution
  • Combine related operations
  • Use sub-workflows for reuse

**2. Use Parallel Execution**

  • Execute independent steps simultaneously
  • Reduces total execution time
  • Useful for multi-channel operations

**3. Cache Frequently Used Data**

  • Store results in variables
  • Avoid redundant API calls
  • Use caching where available

**4. Optimize API Calls**

  • Batch operations when possible
  • Use filters to reduce data transfer
  • Limit query results

**5. Choose Efficient Integrations**

  • Some integrations are faster than others
  • Test integration performance
  • Use recommended integrations

Security Considerations

**1. Protect Sensitive Data**

  • Don't hard-code API keys
  • Use integration credentials
  • Mask sensitive values in logs

**2. Validate Input Data**

  • Define input schemas
  • Use validation rules
  • Sanitize user input

**3. Follow Principle of Least Privilege**

  • Use minimum required permissions
  • Restrict agent maturity levels
  • Limit integration scopes

**4. Audit Workflow Execution**

  • Review execution logs
  • Monitor for suspicious activity
  • Set up alerts for failures

**5. Test Before Production**

  • Test workflows thoroughly
  • Use test mode first
  • Gradually roll out to production

---

Troubleshooting

Common Errors and Solutions

**Error 1: "Integration not connected"**

  • **Cause**: OAuth credentials not configured
  • **Solution**: Click integration badge to connect
  • **Prevention**: Connect integrations before building workflows

**Error 2: "Variable not found: ${input.name}"**

  • **Cause**: Input variable not defined or misspelled
  • **Solution**: Check variable name in workflow settings
  • **Prevention**: Use variable panel to insert variables

**Error 3: "Agent maturity level insufficient"**

  • **Cause**: Agent cannot perform requested action
  • **Solution**: Upgrade agent maturity or change operation
  • **Prevention**: Check maturity requirements before adding nodes

**Error 4: "Quota exceeded"**

  • **Cause**: Plan limit reached
  • **Solution**: Upgrade plan or wait for reset
  • **Prevention**: Monitor usage and optimize workflows

**Error 5: "Workflow execution timeout"**

  • **Cause**: Workflow took too long to execute
  • **Solution**: Optimize workflow or increase timeout
  • **Prevention**: Keep workflows under 5 minutes

Integration Connection Issues

**Problem: Cannot connect integration**

**Solutions:**

  1. **Check OAuth Status**
  • Go to Integrations page
  • Verify integration is connected
  • Reconnect if necessary
  1. **Check Permissions**
  • Verify OAuth scopes are correct
  • Grant required permissions
  • Re-authorize if needed
  1. **Check Network**
  • Verify internet connection
  • Check firewall settings
  • Try different browser
  1. **Clear Cache**
  • Clear browser cache
  • Clear ATUM cache
  • Log out and log back in

**Problem: Integration connected but still failing**

**Solutions:**

  1. **Verify Credentials**
  • Check API keys are valid
  • Verify OAuth token is not expired
  • Refresh credentials
  1. **Test Integration**
  • Go to Integrations page
  • Click "Test Connection"
  • Review test results
  1. **Check Integration Status**
  • Visit integration status page
  • Check for service outages
  • Review status updates

Governance Restrictions

**Problem: Agent cannot perform action**

**Solutions:**

  1. **Check Maturity Level**
  • Verify agent maturity
  • Review action requirements
  • Upgrade maturity if needed
  1. **Review Restrictions**
  • Check governance restrictions
  • Understand what's allowed
  • Adjust workflow accordingly
  1. **Use Different Agent**
  • Select higher maturity agent
  • Create new agent with appropriate maturity
  • Use autonomous agent for full access

**Problem: Agent approval required**

**Solutions:**

  1. **Provide Approval**
  • Review proposed action
  • Approve or reject
  • Provide feedback
  1. **Upgrade Maturity**
  • Move agent to higher maturity
  • Bypass approval requirement
  • Use supervised or autonomous agent
  1. **Adjust Workflow**
  • Use agent for allowed actions
  • Use integration nodes for restricted actions
  • Split workflow appropriately

Getting Help

**Documentation**

**Community**

  • ATUM Community Forum
  • Slack Community
  • Stack Overflow (atum-saas tag)

**Support**

  • Email Support: support@atum-saas.com
  • In-App Help: Click **Help** button in toolbar
  • Submit Ticket: Use contact form

**Resources**

  • Video Tutorials
  • Webinars
  • Blog Posts
  • Example Workflows

---

**User Guide Version:** 1.0.0

**Last Updated:** 2026-03-28

**Maintained By:** ATUM SaaS Documentation Team

For the latest updates and announcements, follow us on Twitter @ATUM_SaaS.